import { z } from 'zod'

// 用户相关的 Zod schemas
export const UserSchema = z.object({
  uid: z.string().uuid('UID 必须是有效的 UUID'),
  email: z.string().email('邮箱格式不正确'),
  nickname: z.string().min(1, '昵称不能为空'),
  age: z.number().int().min(0).max(150, '年龄必须在 0-150 之间').optional().nullable(),
  sex: z.string().optional().nullable(),
  createdAt: z.date().or(z.string()),
  updatedAt: z.date().or(z.string())
})

export type User = z.infer<typeof UserSchema>

// 注册用户的输入 schema
export const RegisterSchema = z.object({
  email: z.string().email('邮箱格式不正确'),
  password: z.string().min(6, '密码至少需要 6 个字符'),
  nickname: z.string().min(1, '昵称不能为空'),
  age: z.number().int().min(0).max(150, '年龄必须在 0-150 之间').optional(),
  sex: z.string().optional()
})
export type RegisterInput = z.infer<typeof RegisterSchema>

// 登录用户的输入 schema
export const LoginSchema = z.object({
  email: z.string().email('邮箱格式不正确'),
  password: z.string().min(1, '密码不能为空')
})
export type LoginInput = z.infer<typeof LoginSchema>

// 登录响应 schema（用户信息不包含 password）
export const LoginResponseSchema = z.object({
  token: z.string(),
  user: UserSchema
})
export type LoginResponse = z.infer<typeof LoginResponseSchema>

// 创建用户的输入 schema（不需要 uid，数据库会自动生成）
export const CreateUserSchema = UserSchema.omit({ uid: true, createdAt: true, updatedAt: true })
export type CreateUserInput = z.infer<typeof CreateUserSchema>

// 更新用户的输入 schema（所有字段可选，除了 uid）
export const UpdateUserSchema = UserSchema.partial().omit({ uid: true, email: true, createdAt: true, updatedAt: true })
export type UpdateUserInput = z.infer<typeof UpdateUserSchema>

// 获取用户列表的查询参数
export const GetUsersQuerySchema = z.object({
  limit: z.number().int().positive().default(10).optional(),
  offset: z.number().int().min(0).default(0).optional(),
  sex: z.string().optional() // 可选：按性别筛选
})
export type GetUsersQuery = z.infer<typeof GetUsersQuerySchema>
